package com.gjx.leetcode;

//6. Z 字形变换
//
//
//将一个给定字符串根据给定的行数，以从上往下、从左到右进行 Z 字形排列。
//
//比如输入字符串为 "LEETCODEISHIRING" 行数为 3 时，排列如下：
//
//L   C   I   R
//E T O E S I I G
//E   D   H   N
//之后，你的输出需要从左往右逐行读取，产生出一个新的字符串，比如："LCIRETOESIIGEDHN"。
//
//请你实现这个将字符串进行指定行数变换的函数：
//
//string convert(string s, int numRows);
//示例 1:
//
//输入: s = "LEETCODEISHIRING", numRows = 3
//输出: "LCIRETOESIIGEDHN"
//示例 2:
//
//输入: s = "LEETCODEISHIRING", numRows = 4
//输出: "LDREOEIIECIHNTSG"
//解释:
//
//L     D     R
//E   O E   I I
//E C   I H   N
//T     S     G

//"PAYPALISHIRING"
//3

//P A H
//APLS
//Y I
//"PLIINAASRGYPHI"

public class Solution006 {
	
	public String convert(String s, int numRows) {
        
		if (numRows <= 1) {
			return s;
		}
		
		if (s == null || s.length() < 2) {
			return s;
		}
		
		StringBuilder[] sbArray = new StringBuilder[numRows];
		
		for (int i=0; i<numRows; i++) {
			sbArray[i] = new StringBuilder();
		}

		boolean dirDown = true;
		int line = 0;
		
		for (int i=0; i<s.length(); i++) {
			
			if (dirDown) {
				sbArray[line++].append(s.charAt(i));
				if (line == numRows) {
					dirDown = false;
					line-=2;
				}
			} else {
				sbArray[line--].append(s.charAt(i));
				if (line == -1) {
					dirDown = true;
					line+=2;
				}
			}
			
		}
		
		StringBuilder sb = new StringBuilder();
		for (int i=0; i<numRows; i++) {
			sb.append(sbArray[i]);
		}
		return sb.toString();
    }
	
	public static void main(String[] args) {
		new Solution006().convert("PAYPALISHIRING", 3);
	}
}
